﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Graphics;

namespace Dev2419a_LunarLander3D
{
    /// <summary>
    /// Classe que controla informações básicas do jogo e sua visualização
    /// </summary>
    class HUD
    {
        // valores iniciais
        private int pontuacaoInicial = 0;
        private int vidasInicial = 3;
        private float combustivelInicial = 100f; /* 100% */
        private float oxigenioInicial = 100f;    /* 100% */

        private Texture2D imagemHUD;
        private Texture2D pixelPreto;
        private Texture2D setaV;
        private Texture2D setaH;
        private Texture2D imagemVida;

        private int pontuacao;
        private float combustivel;
        private float oxigenio;
        private int vidas;

        /// <summary>
        /// Esta variável deve representar a altura do módulo lunar
        /// se chegar em 0 o módulo toca o solo e deve estar na posição correta de pouso
        /// </summary>
        public float altura;

        /// <summary>
        /// Esta variável deve representar a velocidade do módulo lunar
        /// Ao tocar no solo na posição correta de pouso, ele não pode estar muito veloz
        /// </summary>
        private float velocidade;

        /// <summary>
        /// Esta variável representa a velocidade máxima que o módulo pode ter ao tocar o solo
        /// </summary>
        private float velocidadeMaximaColisao = 1;

        private int tempo = 300; //em segundos

        SpriteFont fonte;

        enum Fases 
        {
            INTRODUCAO,
            APOLLO_11,
            APOLLO_12,
            APOLLO_13,
            APOLLO_14,
            APOLLO_15,
            APOLLO_16,
            APOLLO_17,
            APOLLO_18,
        }

        Fases fase = Fases.INTRODUCAO;

        /// <summary>
        /// 
        /// </summary>
        /// <param name="Content">PRA QUE?</param>
        /// <param name="fonte"></param>
        public HUD(ContentManager Content)
        {
            this.imagemHUD  = Content.Load<Texture2D>("ll3d-hud");
            this.pixelPreto = Content.Load<Texture2D>("quadrado1px");
            this.setaV = Content.Load<Texture2D>("seta-v");
            this.setaH = Content.Load<Texture2D>("seta-h");
            this.imagemVida = Content.Load<Texture2D>("vida");
            this.fonte = Content.Load<SpriteFont>("Display");
        }

        public HUD(ContentManager Content, SpriteFont fonte)
        {
            this.imagemHUD  = Content.Load<Texture2D>("ll3d-hud");
            this.pixelPreto = Content.Load<Texture2D>("quadrado1px");
            this.setaV = Content.Load<Texture2D>("seta-v");
            this.setaH = Content.Load<Texture2D>("seta-h");
            this.imagemVida = Content.Load<Texture2D>("vida");
            this.fonte = fonte;
        }

        /// <summary>
        /// FALTA PREENCHER
        /// </summary>
        /// <param name="gameTime"></param>
        public void Update(GameTime gameTime, Nave nave)
        {

            //this.pontuacao = nave.pontuacao;
            this.vidas = nave.getVidas();
            this.velocidade = nave.getVelocidade();
            this.combustivel = nave.getCombustivel();
            this.oxigenio = nave.getOxigenio();

        }

        /// <param name="gameTime"></param>
        /// <param name="spriteBatch"></param>
        public void Draw(GameTime gameTime, SpriteBatch spriteBatch)
        {
            spriteBatch.Draw(this.imagemHUD, new Vector2(0, 0), Color.White);
            spriteBatch.Draw(this.pixelPreto, new Rectangle(716, 55, 15, (int)((oxigenioInicial - oxigenio) * 70 / oxigenioInicial)), Color.White);
            spriteBatch.Draw(this.pixelPreto, new Rectangle(729, 55, 15, (int)((combustivelInicial - combustivel) * 70 / combustivelInicial)), Color.White);

            spriteBatch.Draw(this.setaV, new Rectangle(240, 127 - (int)this.velocidade * 3, 10, 10), (this.velocidade>-1.5f?Color.Green:Color.Red));

            
            if (this.vidas >= 3) { spriteBatch.Draw(this.imagemVida, new Vector2(535, 26), Color.White); }
            if (this.vidas >= 2) { spriteBatch.Draw(this.imagemVida, new Vector2(572, 26), Color.White); }
            if (this.vidas >= 1) { spriteBatch.Draw(this.imagemVida, new Vector2(607, 26), Color.White); }

            spriteBatch.DrawString(fonte, pontuacao.ToString(), new Vector2(454 - fonte.MeasureString(pontuacao.ToString()).X, 20), Color.Yellow);
            
        }

    }
}
